<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>内部选项设置</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="regexp.reference.alternation.html">可选路径(|)</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="regexp.reference.subpatterns.html">子组(子模式)</a></div>
 <div class="up"><a href="reference.pcre.pattern.syntax.html">PCRE 正则语法</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="regexp.reference.internal-options" class="section">
  <h2 class="title">内部选项设置</h2>
  <p class="para">
   <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_CASELESS</a>, 
   <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_MULTILINE</a>,  
   <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_DOTALL</a>,
   <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_UNGREEDY</a>,
   <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_EXTRA</a>,
   <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_EXTENDED</a>
   and
   PCRE_DUPNAMES 等模式修饰符设置可以在模式内部通过一个 perl 选项字符序列来设置，
   语法为:(?修饰符)，可用的修饰符有：
   
   <table class="doctable table">
    <caption><strong>Internal option letters</strong></caption>
    
     <tbody class="tbody">
      <tr>
       <td><em>i</em></td>
       <td>for <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_CASELESS</a></td>
      </tr>

      <tr>
       <td><em>m</em></td>
       <td>for <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_MULTILINE</a></td>
      </tr>

      <tr>
       <td><em>s</em></td>
       <td>for <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_DOTALL</a></td>
      </tr>

      <tr>
       <td><em>x</em></td>
       <td>for <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_EXTENDED</a></td>
      </tr>

      <tr>
       <td><em>U</em></td>
       <td>for <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_UNGREEDY</a></td>
      </tr>

      <tr>
       <td><em>X</em></td>
       <td>for <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_EXTRA</a></td>
      </tr>

      <tr>
       <td><em>J</em></td>
       <td>for <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_INFO_JCHANGED</a></td>
      </tr>

     </tbody>
    
   </table>

  </p>
  <p class="para">
  比如，(?im) 设置表明多行大小写不敏感匹配。同样可以用它来取消这些设置，
  比如 (?im-sx) 设置了 <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_CASELESS</a>，<a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_MULTILINE</a>，
  但是同时取消了 <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_DOTALL</a> 和 <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_EXTENDED</a>。 如果一个字母即出现在 - 之前,
  也出现在 - 之后，这个选项被取消设置。
  </p>
  <p class="para">
  当一个选项在模式的最上级(也就是说不在子组中)时，
  这个改变会影响模式中剩余部分。比如 <em>/ab(?i)c/</em> 仅仅匹配 ”abc” 和 ”abC”。
  这个形式在 PCRE 4.0(PHP 4.3.3) 中被改变。在此之前的版本中，
  /ab(?i)c/ 行为和 /abc/i 完全一致。
  </p>
  <p class="para">
  如果一个选项在子组中设置，产生的影响是不同的。这是 perl 5.005 中行为的一个变种。
  一个选项在子组内部设置，仅仅改变子组中剩余的部分，
  因此 <em>(a(?i)b)c</em> 仅仅匹配 ”abc” 和 ”aBc” (假设没有使用 <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_CASELESS</a> 选项)。
  这就意味着选项在模式的不同位置可以造成不同的影响。 在同一个子模式中，
  一个分支的选项设置回穿透到后面剩余的其他分支中去。
  比如 <em>(a(?i)b|c)</em> 匹配”ab”，
  “aB”， “c” 和 ”C”。 尽管在匹配 ”C” 时第一个分支会在选项被设定前就被丢弃。
  这是因为选项的设定是在编译期确定的，否则可能会带来非常怪异的行为。
  </p>
  <p class="para">
  PCRE 专用选项 <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_UNGREEDY</a> 和 <a href="reference.pcre.pattern.modifiers.html" class="link">PCRE_EXTRA</a> 可以和 perl 兼容选项以同样的方式来改变，
  分别使用字母 U 和 X. (?X) 标记设定有些特殊，它必须出现在任何其他特性之前，
  最好放在最开头的位置。
  </p>
 </div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="regexp.reference.alternation.html">可选路径(|)</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="regexp.reference.subpatterns.html">子组(子模式)</a></div>
 <div class="up"><a href="reference.pcre.pattern.syntax.html">PCRE 正则语法</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
